#ifndef SHELF_H
#define SHELF_H

#include <QString>
#include <QDateTime>

/**
 * @brief 货架表实体类
 *
 * 该类对应数据库中的货架表，用于存储货架的基本信息，
 * 包括所属仓库、名称、库存数量及时间戳等属性，并提供
 * 统一的getter/setter方法进行属性访问和修改。
 */
class Shelf
{
private:
    int id;                 // 主键ID，唯一标识一个货架
    int warehouse_id;       // 关联的仓库ID，用于标识货架所属仓库
    QString shelf_name;     // 货架名称，用于直观区分不同货架
    int shelf_quantity;     // 货架当前库存总量，统计该货架上所有物料的数量总和
    QDateTime create_time;  // 记录创建时间，自动生成，不可手动修改
    QDateTime update_time;  // 记录最后更新时间，每次修改属性时更新

public:
    /**
     * @brief 无参构造函数
     *
     * 初始化所有数值类型属性为0，字符串为空，
     * 时间戳为默认值，适合需要后续通过setter设置属性的场景。
     */
    Shelf()
        : id(0),
          warehouse_id(0),
          shelf_quantity(0)
    {}

    /**
     * @brief 全参数构造函数
     *
     * 一次性初始化所有属性，适合从数据库读取数据后直接创建对象。
     *
     * @param id            货架ID
     * @param warehouse_id  所属仓库ID
     * @param shelf_name    货架名称
     * @param shelf_quantity 货架库存总量
     * @param create_time   创建时间
     * @param update_time   最后更新时间
     */
    Shelf(int id,
          int warehouse_id,
          const QString& shelf_name,
          int shelf_quantity,
          const QDateTime& create_time,
          const QDateTime& update_time)
        : id(id),
          warehouse_id(warehouse_id),
          shelf_name(shelf_name),
          shelf_quantity(shelf_quantity),
          create_time(create_time),
          update_time(update_time)
    {}

    // -------------------------- Getter 方法 --------------------------

    /**
     * @brief 获取货架ID
     * @return 货架的主键ID
     */
    int get_id() const { return id; }

    /**
     * @brief 获取所属仓库ID
     * @return 货架关联的仓库ID
     */
    int get_warehouse_id() const { return warehouse_id; }

    /**
     * @brief 获取货架名称
     * @return 货架的名称字符串
     */
    QString get_shelf_name() const { return shelf_name; }

    /**
     * @brief 获取货架库存总量
     * @return 货架上所有物料的数量总和
     */
    int get_shelf_quantity() const { return shelf_quantity; }

    /**
     * @brief 获取创建时间
     * @return 记录创建时的时间戳
     */
    QDateTime get_create_time() const { return create_time; }

    /**
     * @brief 获取最后更新时间
     * @return 记录最后一次修改时的时间戳
     */
    QDateTime get_update_time() const { return update_time; }

    // -------------------------- Setter 方法 --------------------------

    /**
     * @brief 设置货架ID
     * @param value 新的货架ID值
     */
    void set_id(int value) { id = value; }

    /**
     * @brief 设置所属仓库ID
     * @param value 新的仓库ID值
     */
    void set_warehouse_id(int value) { warehouse_id = value; }

    /**
     * @brief 设置货架名称
     * @param value 新的货架名称字符串
     */
    void set_shelf_name(const QString& value) { shelf_name = value; }

    /**
     * @brief 设置货架库存总量
     * @param value 新的库存总量值
     */
    void set_shelf_quantity(int value) { shelf_quantity = value; }

    /**
     * @brief 设置创建时间
     * @param value 新的创建时间戳
     */
    void set_create_time(const QDateTime& value) { create_time = value; }

    /**
     * @brief 设置最后更新时间
     * @param value 新的更新时间戳
     */
    void set_update_time(const QDateTime& value) { update_time = value; }
};

#endif // SHELF_H
